package cn.longg.service;

import cn.longg.entity.User;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface IUserService extends IBaseService<User> {

    /**
     * 查看邮箱或者用户名是否已经被注册
     * @param user
     * @return
     */
    int checkRegister(User user);

    /**
     * 执行注册
     * @param user
     * @return
     */
    int doRegister(User user);

    /**
     * 执行记住我功能，将信息保存到redis中
     * @param key ip地址+用户名
     * @param value user的json字符串
     */
    void remember(String key,String value);

    /**
     * 根据cookie给的key去redis查是否是记住我用户
     * @param key
     */
    String getRemember(String key);

    /**
     * 用户使用logout的时候应该讲记住我的东西取消
     * @param key
     */
    void delRemember(String key);

    /**
     * 忘记密码需要邮箱，该方法查看邮箱是否存在
     * @param email
     * @return
     */
    boolean checkEmail(String email);

    /**
     * 发送验证码去邮箱
     * @param email 要发送的目的邮箱
     * @return
     */
    String sendEmailCode(String email);

    /**
     * 获取redis中的邮箱验证码
     * @return
     */
    String getEmailCode(String key);

    /**
     * 设置redis中的邮箱验证码
     * @param key
     * @param code
     */
    void setEmailCode(String key,String code);


    /**
     * 查看该id的用户有多少粉丝
     * @param id
     * @return
     */
    int getFansNum(Integer id);

    /**
     * 分页查询所有用户，如果有名字条件就加上条件
     * @param name
     * @param page
     * @param pageSize
     * @return
     */
    PageInfo selectByPage(String name, int page, int pageSize);

    /**
     * 查看数+1
     * @param user
     */
    void lookIncr(User user);

    /**
     * 查找登录用户的所有关注用户
     * @param checkUser
     * @return
     */
    List<Integer> selectFocusUser(User checkUser);

    /**
     * 关注用户
     * @param user 被关注的那个用户
     * @param loginUser 当前用户
     * @return
     */
    boolean focus(User user,User loginUser);

    /**
     * 取关用户
     * @param user 被取关的用户
     * @param loginUser 当前用户
     * @return
     */
    boolean unfocus(User user, User loginUser);

    /**
     * 分页查询所有关注的用户
     * @param page
     * @param pageSize
     * @return
     */
    PageInfo selectFocusUserByPage(int page, int pageSize,User loginUser);

    /**
     * 根据部门中所有人
     * @param deptId
     * @return
     */
    List<User> getUserByDeptId(Integer deptId);

    /**
     * 上传头像
     * @param file
     */
    String upload(MultipartFile file,User loginUser);
}
